์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ทธ๋ํ์ ์ํ ์ข ์์ฑ์ ์ดํดํ๊ณ ํด๊ฒฐํ์ฌ ์ฝ๋ ๊ตฌ์กฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ์ธ์. ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ธ๋ก๋ฒ ๊ฐ์ด๋์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ทธ๋ํ ์ํ ๋๊ธฐ: ์ํ ์ข ์์ฑ ํด๊ฒฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ณธ์ง์ ์ผ๋ก ๋์ ์ด๊ณ ๋ค์ฌ๋ค๋ฅํ ์ธ์ด๋ก, ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ๋ถํฐ ๋ฐฑ์๋ ์๋ฒ์ฌ์ด๋ ์คํฌ๋ฆฝํ , ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ด๋ฅด๊ธฐ๊น์ง ์ ์ธ๊ณ์ ์ผ๋ก ๋ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ๊ฐ ๋ณต์กํด์ง์ ๋ฐ๋ผ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ, ํ์ ๊ฐ๋ฐ์ ์ํด ์ฝ๋๋ฅผ ๋ชจ๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ค์ํด์ง๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋๋ค์ด ์ํธ ์์กด์ ์ด ๋์ด '์ํ ์ข ์์ฑ'์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํฉ๋๋ค. ์ด ๊ฒ์๋ฌผ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ทธ๋ํ์ ์ํ ์ข ์์ฑ์ ๋ํด ๊น์ด ํ๊ณ ๋ค๊ณ , ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋์ง ์ค๋ช ํ๋ฉฐ, ๊ฐ์ฅ ์ค์ํ๊ฒ๋ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต์ ์ ๊ณตํฉ๋๋ค. ๋์ ๋ ์๋ ์ ์ธ๊ณ ๊ฐ์ง์์ ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋ชจ๋ ๊ฒฝํ ์์ค์ ๊ฐ๋ฐ์์ ๋๋ค. ์ด ๊ฒ์๋ฌผ์ ๋ชจ๋ฒ ์ฌ๋ก์ ์ด์ ์ ๋ง์ถ๊ณ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ค๋ช ๊ณผ ๊ตญ์ ์ ์ธ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋๊ณผ ์ข ์์ฑ ๊ทธ๋ํ ์ดํดํ๊ธฐ
์ํ ์ข ์์ฑ์ ๋ค๋ฃจ๊ธฐ ์ ์, ๋จผ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋๊ณผ ๊ทธ๊ฒ๋ค์ด ์ข ์์ฑ ๊ทธ๋ํ ๋ด์์ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง์ ๋ํ ํ์คํ ์ดํด๋ฅผ ๋ค์ ธ๋ด ์๋ค. ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ES6(ECMAScript 2015)์์ ๋์ ๋ ES ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ๋จ์๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ชจ๋๋ค์ ํตํด ๋ ํฐ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ์๊ณ , ๊ด๋ฆฌํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์กฐ๊ฐ์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
ES ๋ชจ๋์ด๋ ๋ฌด์์ธ๊ฐ?
ES ๋ชจ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํจํค์งํ๊ณ ์ฌ์ฌ์ฉํ๋ ํ์ค ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ค์์ ํ ์ ์์ต๋๋ค:
- Import
import๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ชจ๋์์ ํน์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ต๋๋ค. - Export
export๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ชจ๋์์ ๊ธฐ๋ฅ(๋ณ์, ํจ์, ํด๋์ค)์ ๋ด๋ณด๋ด ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
์์:
moduleA.js:
export function myFunction() {
console.log('Hello from moduleA!');
}
moduleB.js:
import { myFunction } from './moduleA.js';
function anotherFunction() {
myFunction();
}
anotherFunction(); // Output: Hello from moduleA!
์ด ์์์์ moduleB.js๋ moduleA.js์์ myFunction์ ๊ฐ์ ธ์ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ๋จ์ํ ๋จ๋ฐฉํฅ ์ข
์์ฑ์
๋๋ค.
์ข ์์ฑ ๊ทธ๋ํ: ๋ชจ๋ ๊ด๊ณ ์๊ฐํํ๊ธฐ
์ข ์์ฑ ๊ทธ๋ํ๋ ํ๋ก์ ํธ ๋ด์ ๋ค๋ฅธ ๋ชจ๋๋ค์ด ์๋ก ์ด๋ป๊ฒ ์์กดํ๋์ง๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ํ๋ ๋๋ค. ๊ทธ๋ํ์ ๊ฐ ๋ ธ๋๋ ๋ชจ๋์ ๋ํ๋ด๊ณ , ์ฃ์ง(ํ์ดํ)๋ ์ข ์์ฑ(import ๋ฌธ)์ ๋ํ๋ ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์์์์ ๊ทธ๋ํ๋ ๋ ๊ฐ์ ๋ ธ๋(moduleA์ moduleB)๋ฅผ ๊ฐ์ง๋ฉฐ, moduleB์์ moduleA๋ก ํฅํ๋ ํ์ดํ๊ฐ ์์ด moduleB๊ฐ moduleA์ ์์กดํจ์ ์๋ฏธํฉ๋๋ค. ์ ๊ตฌ์กฐํ๋ ํ๋ก์ ํธ๋ ๋ช ํํ๊ณ ๋น์ํ์ ์ธ(์ฌ์ดํด์ด ์๋) ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ์งํฅํด์ผ ํฉ๋๋ค.
๋ฌธ์ ์ : ์ํ ์ข ์์ฑ
์ํ ์ข ์์ฑ์ ๋ ๊ฐ ์ด์์ ๋ชจ๋์ด ์ง์ ๋๋ ๊ฐ์ ์ ์ผ๋ก ์๋ก๋ฅผ ์์กดํ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ ์ข ์์ฑ ๊ทธ๋ํ์ ์ํ(์ฌ์ดํด)์ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, moduleA๊ฐ moduleB์์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , moduleB๊ฐ moduleA์์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด ์ํ ์ข ์์ฑ์ด ๋ฐ์ํ ๊ฒ์ ๋๋ค. ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์์ ์์คํ ๋ณด๋ค ์ด๋ฐ ์ํฉ์ ๋ ์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์์ง๋ง, ์ํ ์ข ์์ฑ์ ์ฌ์ ํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
์ํ ์ข ์์ฑ์ ์ ๋ฌธ์ ๊ฐ ๋๋๊ฐ?
์ํ ์ข ์์ฑ์ผ๋ก ์ธํด ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค:
- ์ด๊ธฐํ ์์: ๋ชจ๋์ด ์ด๊ธฐํ๋๋ ์์๊ฐ ๋งค์ฐ ์ค์ํด์ง๋๋ค. ์ํ ์ข ์์ฑ์ด ์๋ ๊ฒฝ์ฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ค ์์๋ก ๋ชจ๋์ ๋ก๋ํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ ๋๋ก ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์ค๋ฅ๋ ์๊ธฐ์น ์์ ๋์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋ฐํ์ ์ค๋ฅ: ๋ชจ๋ ์ด๊ธฐํ ์ค์ ํ ๋ชจ๋์ด ์์ง ์์ ํ ์ด๊ธฐํ๋์ง ์์ ๋ค๋ฅธ ๋ชจ๋์์ ๋ด๋ณด๋ธ ๊ฒ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด(๋ ๋ฒ์งธ ๋ชจ๋์ด ์์ง ๋ก๋ ์ค์ด๊ธฐ ๋๋ฌธ์),
undefined์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. - ์ฝ๋ ๊ฐ๋ ์ฑ ์ ํ: ์ํ ์ข ์์ฑ์ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์ณ ๋ฐ์ดํฐ์ ๋ก์ง์ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ์ด๋ ๋๋ผ์ ๊ฐ๋ฐ์๋ ์ด๋ฐ ์ข ๋ฅ์ ๊ตฌ์กฐ๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๋ ๋ณต์กํ ์ข ์์ฑ ๊ทธ๋ํ๋ก ๊ตฌ์ถ๋ ์ฝ๋๋ฒ ์ด์ค๋ณด๋ค ํจ์ฌ ๋ ์ด๋ ต๊ฒ ๋๋ ์ ์์ต๋๋ค.
- ํ ์คํธ์ ์ด๋ ค์: ์ํ ์ข ์์ฑ์ด ์๋ ๋ชจ๋์ ํ ์คํธํ๋ ๊ฒ์ ์ข ์์ฑ์ ๋ชจํน(mocking)ํ๊ณ ์คํฐ๋น(stubbing)ํ๋ ๊ฒ์ด ๋ ๊น๋ค๋ก์์ง๊ธฐ ๋๋ฌธ์ ๋ ๋ณต์กํด์ง๋๋ค.
- ์ฑ๋ฅ ์ค๋ฒํค๋: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ํ ์ข ์์ฑ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฉฐ, ํนํ ๋ชจ๋์ด ํฌ๊ฑฐ๋ ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒฝ๋ก(hot path)์ ์๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
์ํ ์ข ์์ฑ ์์
์ํ ์ข ์์ฑ์ ์ค๋ช ํ๊ธฐ ์ํด ๊ฐ๋จํ ์์๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์์๋ ํ๋ก์ ํธ ๊ด๋ฆฌ์ ์ผ๋ถ ์ธก๋ฉด์ ๋ํ๋ด๋ ๊ฐ์ ์๋๋ฆฌ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
project.js:
import { taskManager } from './task.js';
export const project = {
name: 'Project X',
addTask: (taskName) => {
taskManager.addTask(taskName, project);
},
getTasks: () => {
return taskManager.getTasksForProject(project);
}
};
task.js:
import { project } from './project.js';
export const taskManager = {
tasks: [],
addTask: (taskName, project) => {
taskManager.tasks.push({ name: taskName, project: project.name });
},
getTasksForProject: (project) => {
return taskManager.tasks.filter(task => task.project === project.name);
}
};
์ด ๋จ์ํ๋ ์์์์ project.js์ task.js๋ ์๋ก๋ฅผ ๊ฐ์ ธ์ค๋ฏ๋ก ์ํ ์ข
์์ฑ์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฌํ ์ค์ ์ ์ด๊ธฐํ ์ค์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฉฐ, ํ๋ก์ ํธ๊ฐ ์์
๋ชฉ๋ก๊ณผ ์ํธ ์์ฉํ๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ ์๊ธฐ์น ์์ ๋ฐํ์ ๋์์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ๋ ํฐ ์์คํ
์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
์ํ ์ข ์์ฑ ํด๊ฒฐ: ์ ๋ต๊ณผ ๊ธฐ๋ฒ
๋คํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ํ ์ข ์์ฑ์ ํด๊ฒฐํ ์ ์๋ ๋ช ๊ฐ์ง ํจ๊ณผ์ ์ธ ์ ๋ต์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฒ๋ค์ ์ข ์ข ์ฝ๋ ๋ฆฌํฉํ ๋ง, ๋ชจ๋ ๊ตฌ์กฐ ์ฌํ๊ฐ, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฐ์ ์ํธ์์ฉ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ ์ ํํ ์ง๋ ์ํฉ์ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
1. ๋ฆฌํฉํ ๋ง ๋ฐ ์ฝ๋ ๊ตฌ์กฐ ์กฐ์
๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ์ข ์ข ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ํ ์ข ์์ฑ์ ์์ ํ ์ ๊ฑฐํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ ๋ชจ๋๋ก ์ฎ๊ธฐ๊ฑฐ๋ ๋ชจ๋ ๊ตฌ์ฑ ๋ฐฉ์์ ์ฌ๊ณ ํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์์์ ์ ํ๋ก์ ํธ๋ฅผ ๋์ ์์ค์์ ์ดํดํ๋ ๊ฒ์ ๋๋ค.
์์:
ํ๋ก์ ํธ์ ์์ ์์๋ฅผ ๋ค์ ์ดํด๋ณด๊ณ ์ํ ์ข ์์ฑ์ ์ ๊ฑฐํ๋๋ก ๋ฆฌํฉํ ๋งํด ๋ณด๊ฒ ์ต๋๋ค.
utils.js:
export function createTask(taskName, projectName) {
return { name: taskName, project: projectName };
}
export function filterTasksByProject(tasks, projectName) {
return tasks.filter(task => task.project === projectName);
}
project.js:
import { taskManager } from './task.js';
import { filterTasksByProject } from './utils.js';
export const project = {
name: 'Project X',
addTask: (taskName) => {
taskManager.addTask(taskName, project.name);
},
getTasks: () => {
return taskManager.getTasksForProject(project.name);
}
};
task.js:
import { createTask, filterTasksByProject } from './utils.js';
export const taskManager = {
tasks: [],
addTask: (taskName, projectName) => {
const newTask = createTask(taskName, projectName);
taskManager.tasks.push(newTask);
},
getTasksForProject: (projectName) => {
return filterTasksByProject(taskManager.tasks, projectName);
}
};
์ด ๋ฆฌํฉํ ๋ง๋ ๋ฒ์ ์์๋ ์ผ๋ฐ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ํฌํจํ๋ ์๋ก์ด ๋ชจ๋์ธ utils.js๋ฅผ ๋ง๋ค์์ต๋๋ค. taskManager์ project ๋ชจ๋์ ๋ ์ด์ ์๋ก ์ง์ ์ ์ผ๋ก ์์กดํ์ง ์์ต๋๋ค. ๋์ , ๊ทธ๋ค์ utils.js์ ์ ํธ๋ฆฌํฐ ํจ์์ ์์กดํฉ๋๋ค. ์์์์ ์์
์ด๋ฆ์ ํ๋ก์ ํธ ์ด๋ฆ์ ๋ฌธ์์ด๋ก๋ง ์ฐ๊ฒฐ๋์ด ์์ผ๋ฏ๋ก ์์
๋ชจ๋์์ ํ๋ก์ ํธ ๊ฐ์ฒด๊ฐ ํ์ํ์ง ์๊ฒ ๋์ด ์ํ์ ๋์ต๋๋ค.
2. ์์กด์ฑ ์ฃผ์
์์กด์ฑ ์ฃผ์ ์ ์ผ๋ฐ์ ์ผ๋ก ํจ์ ๋งค๊ฐ๋ณ์๋ ์์ฑ์ ์ธ์๋ฅผ ํตํด ๋ชจ๋์ ์์กด์ฑ์ ์ ๋ฌํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋๋ค์ด ์๋ก ์ด๋ป๊ฒ ์์กดํ๋์ง๋ฅผ ๋ ๋ช ์์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค. ๋ณต์กํ ์์คํ ์ด๋ ๋ชจ๋์ ๋ ํ ์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ณ ์ถ์ ๋ ํนํ ์ ์ฉํฉ๋๋ค. ์์กด์ฑ ์ฃผ์ ์ ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ ์๋ ค์ง ๋์์ธ ํจํด์ ๋๋ค.
์์:
ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ์ค์ ๊ฐ์ฒด์ ์ ๊ทผํด์ผ ํ์ง๋ง, ๋ ๋ฒ์งธ ๋ชจ๋์ด ์ฒซ ๋ฒ์งธ ๋ชจ๋์ ํ์๋ก ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด ๋ด ์๋ค. ํ๋๋ ๋๋ฐ์ด์ ์๊ณ ๋ค๋ฅธ ํ๋๋ ๋ด์์์ ์์ผ๋ฉฐ, ๋ ์ฅ์ ๋ชจ๋์์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ค์ ๊ฐ์ฒด๋ฅผ ์ฒซ ๋ฒ์งธ ๋ชจ๋์ ์ฃผ์ ํ ์ ์์ต๋๋ค.
config.js:
export const defaultConfig = {
apiUrl: 'https://api.example.com',
timeout: 5000
};
moduleA.js:
import { fetchData } from './moduleB.js';
export function doSomething(config = defaultConfig) {
console.log('Doing something with config:', config);
fetchData(config);
}
moduleB.js:
export function fetchData(config) {
console.log('Fetching data from:', config.apiUrl);
}
์ค์ ๊ฐ์ฒด๋ฅผ doSomething ํจ์์ ์ฃผ์
ํจ์ผ๋ก์จ moduleA์ ๋ํ ์์กด์ฑ์ ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฒ์ ๋ค๋ฅธ ํ๊ฒฝ(์: ๊ฐ๋ฐ, ํ
์คํธ, ํ๋ก๋์
)์ ๋ง๊ฒ ๋ชจ๋์ ๊ตฌ์ฑํ ๋ ํนํ ์ ์ฉํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ ์ธ๊ณ์ ์ผ๋ก ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
3. ๊ธฐ๋ฅ์ ์ผ๋ถ๋ง ๋ด๋ณด๋ด๊ธฐ (๋ถ๋ถ์ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ)
๋๋ก๋ ์ํ ์ข ์์ฑ์ ๊ด๋ จ๋ ๋ค๋ฅธ ๋ชจ๋์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์์ ๋ถ๋ถ๋ง ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ๋ชจ๋์ ๋ฆฌํฉํ ๋งํ์ฌ ๋ ์ง์ค๋ ๊ธฐ๋ฅ ์งํฉ์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ํ์ ๋๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ ๊ฒ์ ๊ณ ๋๋ก ๋ชจ๋ํํ๊ณ ๋ถํ์ํ ์ข ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค.
์์:
๋ชจ๋ A๊ฐ ๋ชจ๋ B์ ํจ์ ํ๋๋ง ํ์ํ๊ณ , ๋ชจ๋ B๊ฐ ๋ชจ๋ A์ ๋ณ์ ํ๋๋ง ํ์ํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ด ์ํฉ์์๋ ๋ชจ๋ A๊ฐ ๋ณ์๋ง ๋ด๋ณด๋ด๊ณ ๋ชจ๋ B๊ฐ ํจ์๋ง ๊ฐ์ ธ์ค๋๋ก ๋ฆฌํฉํ ๋งํ๋ฉด ์ํ์ฑ์ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ๋ฐ์์ ๋ค์ํ ๊ธฐ์ ์์ค์ ๊ฐ์ง ๋๊ท๋ชจ ํ๋ก์ ํธ์ ํนํ ์ ์ฉํฉ๋๋ค.
moduleA.js:
export const myVariable = 'Hello';
moduleB.js:
import { myVariable } from './moduleA.js';
function useMyVariable() {
console.log(myVariable);
}
๋ชจ๋ A๋ ํ์ํ ๋ณ์๋ง ๋ชจ๋ B๋ก ๋ด๋ณด๋ด๊ณ , ๋ชจ๋ B๋ ์ด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด ๋ฆฌํฉํ ๋ง์ ์ํ ์ข ์์ฑ์ ํผํ๊ณ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์ด ํจํด์ ์ ์ธ๊ณ ์ด๋์์๋ ๊ฑฐ์ ๋ชจ๋ ์๋๋ฆฌ์ค์์ ์๋ํฉ๋๋ค.
4. ๋์ ๊ฐ์ ธ์ค๊ธฐ (Dynamic Imports)
๋์ ๊ฐ์ ธ์ค๊ธฐ(import())๋ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ์ด ์ ๊ทผ ๋ฐฉ์์ ์ํ ์ข
์์ฑ์ ํด๊ฒฐํ๋ ๋ฐ ๋งค์ฐ ๊ฐ๋ ฅํ ์ ์์ต๋๋ค. ์ ์ ๊ฐ์ ธ์ค๊ธฐ์ ๋ฌ๋ฆฌ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ ํ๋ก๋ฏธ์ค(promise)๋ฅผ ๋ฐํํ๋ ํจ์ ํธ์ถ์
๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋์ด ์ธ์ ์ด๋ป๊ฒ ๋ก๋๋๋์ง ์ ์ดํ ์ ์์ผ๋ฉฐ ์ํ์ ๋๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋์ด ์ฆ์ ํ์ํ์ง ์์ ์ํฉ์ ํนํ ์ ์ฉํฉ๋๋ค. ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ ์กฐ๊ฑด๋ถ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ชจ๋์ ์ง์ฐ ๋ก๋ฉ(lazy loading)์ ์ฒ๋ฆฌํ๋ ๋ฐ์๋ ์ ํฉํฉ๋๋ค. ์ด ๊ธฐ์ ์ ๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋๋ฆฌ์ค์์ ํญ๋๊ฒ ์ ์ฉ๋ฉ๋๋ค.
์์:
๋ชจ๋ A๊ฐ ๋ชจ๋ B์์ ๋ฌด์ธ๊ฐ๋ฅผ ํ์๋ก ํ๊ณ , ๋ชจ๋ B๊ฐ ๋ชจ๋ A์์ ๋ฌด์ธ๊ฐ๋ฅผ ํ์๋ก ํ๋ ์๋๋ฆฌ์ค๋ฅผ ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ A๊ฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค.
moduleA.js:
export let someValue = 'initial value';
export async function doSomethingWithB() {
const moduleB = await import('./moduleB.js');
moduleB.useAValue(someValue);
}
moduleB.js:
import { someValue } from './moduleA.js';
export function useAValue(value) {
console.log('Value from A:', value);
}
์ด ๋ฆฌํฉํ ๋ง๋ ์์์์ ๋ชจ๋ A๋ import('./moduleB.js')๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ B๋ฅผ ๋์ ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค. ์ด๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ํ ์ข
์์ฑ์ ๋์ต๋๋ค. ๋์ ๊ฐ์ ธ์ค๊ธฐ์ ์ฌ์ฉ์ ์ด์ ์
๊ณ ํ์ค์ด๋ฉฐ, ์ด ๋ฐฉ๋ฒ์ ์ ์ธ๊ณ์ ์ผ๋ก ๋๋ฆฌ ์ง์๋ฉ๋๋ค.
5. ์ค์ฌ์/์๋น์ค ๊ณ์ธต ์ฌ์ฉํ๊ธฐ
๋ณต์กํ ์์คํ ์์๋ ์ค์ฌ์ ๋๋ ์๋น์ค ๊ณ์ธต์ด ๋ชจ๋ ๊ฐ์ ์ค์ ํต์ ์ง์ ์ญํ ์ ํ์ฌ ์ง์ ์ ์ธ ์ข ์์ฑ์ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋์ ๋ถ๋ฆฌ(decouple)ํ๋ ๋ฐ ๋์์ด ๋๋ ๋์์ธ ํจํด์ผ๋ก, ๋ชจ๋์ ๋ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ณ ์ ์ง๋ณด์ํ ์ ์๊ฒ ํฉ๋๋ค. ๋ชจ๋์ ์๋ก๋ฅผ ์ง์ ๊ฐ์ ธ์ค๋ ๋์ ์ค์ฌ์๋ฅผ ํตํด ์๋ก ํต์ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํ์ด ์ ์ธ๊ณ์ ํฉ์ด์ ธ ํ์ ํ ๋ ๊ธ๋ก๋ฒ ๊ท๋ชจ์์ ๋งค์ฐ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ค์ฌ์ ํจํด์ ์ด๋ค ์ง์ญ์์๋ ์ ์ฉ๋ ์ ์์ต๋๋ค.
์์:
๋ ๋ชจ๋์ด ์ง์ ์ ์ธ ์ข ์์ฑ ์์ด ์ ๋ณด๋ฅผ ๊ตํํด์ผ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ด ์๋ค.
mediator.js:
const subscribers = {};
export const mediator = {
subscribe: (event, callback) => {
if (!subscribers[event]) {
subscribers[event] = [];
}
subscribers[event].push(callback);
},
publish: (event, data) => {
if (subscribers[event]) {
subscribers[event].forEach(callback => callback(data));
}
}
};
moduleA.js:
import { mediator } from './mediator.js';
export function doSomething() {
mediator.publish('eventFromA', { message: 'Hello from A' });
}
moduleB.js:
import { mediator } from './mediator.js';
mediator.subscribe('eventFromA', (data) => {
console.log('Received event from A:', data);
});
๋ชจ๋ A๋ ์ค์ฌ์๋ฅผ ํตํด ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๊ณ , ๋ชจ๋ B๋ ๋์ผํ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ์ฌ ๋ฉ์์ง๋ฅผ ์์ ํฉ๋๋ค. ์ค์ฌ์๋ A์ B๊ฐ ์๋ก๋ฅผ ๊ฐ์ ธ์ฌ ํ์๊ฐ ์๋๋ก ํฉ๋๋ค. ์ด ๊ธฐ๋ฒ์ ๋ง์ดํฌ๋ก์๋น์ค, ๋ถ์ฐ ์์คํ ๋ฐ ๊ตญ์ ์ ์ธ ์ฌ์ฉ์ ์ํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
6. ์ง์ฐ๋ ์ด๊ธฐํ
๋๋ก๋ ํน์ ๋ชจ๋์ ์ด๊ธฐํ๋ฅผ ์ง์ฐ์์ผ ์ํ ์ข ์์ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ๋ ์ฆ์ ์ด๊ธฐํํ๋ ๋์ , ํ์ํ ์ข ์์ฑ์ด ์์ ํ ๋ก๋๋ ๋๊น์ง ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ๊ธฐ๋ฒ์ ๊ฐ๋ฐ์๊ฐ ์ด๋์ ์๋ ์๊ด์์ด ๋ชจ๋ ์ ํ์ ํ๋ก์ ํธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์์:
์ํ ์ข ์์ฑ์ด ์๋ ๋ ๋ชจ๋ A์ B๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๋ชจ๋ A์์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ B์ ์ด๊ธฐํ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋ชจ๋์ด ๋์์ ์ด๊ธฐํ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
moduleA.js:
import * as moduleB from './moduleB.js';
export function init() {
// Perform initialization steps in module A
moduleB.initFromA(); // Initialize module B using a function from module A
}
// Call init after moduleA is loaded and its dependencies resolved
init();
moduleB.js:
import * as moduleA from './moduleA.js';
export function initFromA() {
// Module B initialization logic
console.log('Module B initialized by A');
}
์ด ์์์์๋ ๋ชจ๋ A ์ดํ์ ๋ชจ๋ B๊ฐ ์ด๊ธฐํ๋ฉ๋๋ค. ์ด๋ ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ํจ์๋ ๋ฐ์ดํฐ ์ผ๋ถ๋ง ํ์ํ๊ณ ์ง์ฐ๋ ์ด๊ธฐํ๋ฅผ ํ์ฉํ ์ ์๋ ์ํฉ์์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค ์ฌํญ
์ํ ์ข ์์ฑ์ ํด๊ฒฐํ๋ ๊ฒ์ ๋จ์ํ ๊ธฐ๋ฒ์ ์ ์ฉํ๋ ๊ฒ ์ด์์ ๋๋ค. ์ฝ๋ ํ์ง, ์ ์ง๋ณด์์ฑ, ํ์ฅ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๊ดํ์ ๋ณดํธ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
1. ์ข ์์ฑ ๋ถ์ ๋ฐ ์ดํด
ํด๊ฒฐ์ฑ
์ผ๋ก ๋ฐ๋ก ๋ฐ์ด๋ค๊ธฐ ์ ์, ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ข
์์ฑ ๊ทธ๋ํ๋ฅผ ์ ์คํ๊ฒ ๋ถ์ํ๋ ๊ฒ์
๋๋ค. ์ข
์์ฑ ๊ทธ๋ํ ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Node.js ํ๋ก์ ํธ์ ๊ฒฝ์ฐ madge)์ ๊ฐ์ ๋๊ตฌ๋ ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ์๊ฐํํ์ฌ ์ํ ์ข
์์ฑ์ ์ฝ๊ฒ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ข
์์ฑ์ด ์ ์กด์ฌํ๋์ง, ๊ฐ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋๋ก๋ถํฐ ์ด๋ค ๋ฐ์ดํฐ๋ ๊ธฐ๋ฅ์ ํ์๋ก ํ๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ๋ถ์์ ๊ฐ์ฅ ์ ์ ํ ํด๊ฒฐ ์ ๋ต์ ๊ฒฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
2. ๋์จํ ๊ฒฐํฉ์ ์ํ ์ค๊ณ
๋์จํ๊ฒ ๊ฒฐํฉ๋ ๋ชจ๋์ ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ์ญ์์ค. ์ด๋ ๋ชจ๋์ด ๊ฐ๋ฅํ ํ ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ฉฐ, ์๋ก์ ๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ํ ์ง์ ์ ์ธ ์ง์๋ณด๋ค๋ ์ ์ ์๋ ์ธํฐํ์ด์ค(์: ํจ์ ํธ์ถ ๋๋ ์ด๋ฒคํธ)๋ฅผ ํตํด ์ํธ ์์ฉํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๋์จํ ๊ฒฐํฉ์ ์ฒ์๋ถํฐ ์ํ ์ข ์์ฑ์ ๋ง๋ค ๊ฐ๋ฅ์ฑ์ ์ค์ด๊ณ , ํ ๋ชจ๋์ ์์ ์ด ๋ค๋ฅธ ๋ชจ๋์ ์ํฅ์ ๋ฏธ์น ๊ฐ๋ฅ์ฑ์ด ์ ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์ ๋จ์ํํฉ๋๋ค. ๋์จํ ๊ฒฐํฉ์ ์์น์ ์ํํธ์จ์ด ์ค๊ณ์์ ํต์ฌ ๊ฐ๋ ์ผ๋ก ์ ์ธ๊ณ์ ์ผ๋ก ์ธ์ ๋ฐ๊ณ ์์ต๋๋ค.
3. ์์๋ณด๋ค ์ปดํฌ์ง์ ์ ํธ (ํด๋น๋๋ ๊ฒฝ์ฐ)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์์๋ ์์๋ณด๋ค ์ปดํฌ์ง์ ์ ์ ํธํ์ญ์์ค. ์ปดํฌ์ง์ ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ๊ฒฐํฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ ํฌํจํ๋ฉฐ, ์์์ ๊ธฐ์กด ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ปดํฌ์ง์ ์ ์ข ์ข ๋ ์ ์ฐํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ์ด์ด์ ธ, ๊ฐํ ๊ฒฐํฉ๊ณผ ์ํ ์ข ์์ฑ์ ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค. ์ด ๊ดํ์ ํนํ ํ์ด ์ ์ธ๊ณ์ ๋ถ์ฐ๋์ด ์์ ๋ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
4. ๋ชจ๋์ ์ฝ๋ ์์ฑ
๋ชจ๋์ ์ค๊ณ ์์น์ ์ฌ์ฉํ์ญ์์ค. ๊ฐ ๋ชจ๋์ ๊ตฌ์ฒด์ ์ด๊ณ ์ ์ ์๋ ๋ชฉ์ ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ด๋ ๋ชจ๋์ด ํ ๊ฐ์ง ์ผ์ ์ํ๋ ๋ฐ ์ง์คํ๋๋ก ์ ์งํ๊ณ , ์ํ ์ข ์์ฑ์ ๋ ์ทจ์ฝํ ๋ณต์กํ๊ณ ์ง๋์น๊ฒ ํฐ ๋ชจ๋์ ์์ฑ์ ํผํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ชจ๋์ฑ์ ์์น์ ๋ฏธ๊ตญ, ์ ๋ฝ, ์์์ ๋๋ ์ํ๋ฆฌ์นด์ ์๋ ๋ชจ๋ ์ ํ์ ํ๋ก์ ํธ์์ ์ค์ํฉ๋๋ค.
5. ๋ฆฐํฐ ๋ฐ ์ฝ๋ ๋ถ์ ๋๊ตฌ ์ฌ์ฉ
๋ฆฐํฐ ๋ฐ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํ์ญ์์ค. ์ด๋ฌํ ๋๊ตฌ๋ ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ์ ์ฌ์ ์ธ ์ํ ์ข ์์ฑ์ ์๋ณํ์ฌ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๊ธฐ ์ ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ESLint์ ๊ฐ์ ๋ฆฐํฐ ๋ฐ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ ์ฝ๋ฉ ํ์ค๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ฐ์ ํ์ฌ ์ฝ๋ ์ค๋ฉ์ ๋ฐฉ์งํ๊ณ ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ ๋ฐ๋ ๋์์ด ๋ฉ๋๋ค. ์ ์ธ๊ณ์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ผ๊ด๋ ์คํ์ผ์ ์ ์งํ๊ณ ๋ฌธ์ ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
6. ์ฒ ์ ํ ํ ์คํธ
๋ณต์กํ ์ข ์์ฑ์ ๋ค๋ฃฐ ๋์๋ ์ฝ๋๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํฌ๊ด์ ์ธ ๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ ๋ฐ ์๋ํฌ์๋ ํ ์คํธ๋ฅผ ๊ตฌํํ์ญ์์ค. ํ ์คํธ๋ ์ํ ์ข ์์ฑ์ด๋ ํด๊ฒฐ ๊ธฐ๋ฒ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํ๋ก๋์ ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ ์ธ๊ณ ์ด๋์์๋ ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ํด ์ฒ ์ ํ ํ ์คํธ๋ฅผ ๋ณด์ฅํ์ญ์์ค.
7. ์ฝ๋ ๋ฌธ์ํ
ํนํ ๋ณต์กํ ์ข ์์ฑ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ์ฝ๋๋ฅผ ๋ช ํํ๊ฒ ๋ฌธ์ํํ์ญ์์ค. ๋ชจ๋์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๊ณ ์๋ก ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง ์ค๋ช ํ์ญ์์ค. ์ข์ ๋ฌธ์๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ฒ ํ๊ณ , ํฅํ ์ํ ์ข ์์ฑ์ด ๋์ ๋ ์ํ์ ์ค์ผ ์ ์์ต๋๋ค. ๋ฌธ์๋ ํ ์ปค๋ฎค๋์ผ์ด์ ์ ๊ฐ์ ํ๊ณ ํ์ ์ ์ด์งํ๋ฉฐ, ์ ์ธ๊ณ ๋ชจ๋ ํ์ ์ ํฉํฉ๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ์ ์ํ ์ข ์์ฑ์ ์ฅ์ ๋ฌผ์ด ๋ ์ ์์ง๋ง, ์ฌ๋ฐ๋ฅธ ์ดํด์ ๊ธฐ๋ฒ์ ํตํด ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ์ ๋ต์ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฐ์๋ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ข ์์ฑ์ ๋ถ์ํ๊ณ , ๋์จํ ๊ฒฐํฉ์ ์ํด ์ค๊ณํ๋ฉฐ, ์ฒ์๋ถํฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ๋ชจ๋ ์ค๊ณ์ ์ข ์์ฑ ๊ด๋ฆฌ์ ํต์ฌ ์์น์ ์ ์ธ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ์ ๋ฆฌ๋ ๋ชจ๋์ ์ฝ๋๋ฒ ์ด์ค๋ ์ง๊ตฌ์์ ์ด๋ ํ๊ณผ ํ๋ก์ ํธ์ ์ฑ๊ณต์๋ ํ์์ ์ ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฒ์ ๋ถ์ง๋ฐํ ์ฌ์ฉํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ๋ฅผ ์ ์ดํ๊ณ ์ํ ์ข ์์ฑ์ ํจ์ ์ ํผํ ์ ์์ต๋๋ค.